<?php

/*-----------------------------------------------------------*\
|                     - cMySQL / клас -                      |
|              Клас для роботи з базою даних MySQL           |
|              Author:  Skalden Russell                      |
|              Last modify:  20130105                        |
\*-----------------------------------------------------------*/

// Захист
if(!defined('TSUE_SEC')) {
	if(!defined('TSUE_DIR')){
		header('Content-Type: text/html; charset=utf-8');
		$path = dirname(__FILE__);
		$path = substr($path, 0, strlen($path)-15);
		require_once( $path.'/data/language/ru_loc/ru_adminpanel.lng');
	}else{
		$path = TSUE_DIR;
	}
	require_once( $path.'/data/messages/hacking.attempt.php');
	die($TSUE_MSG);
}

// Якщо codepage не визначено, визначить його
if(!defined('DB_CODEPAGE'))
{
	define('DB_CODEPAGE', 'utf8');
}

class cMysql
{

// Хендлер з'єднання з базою даних
	var $id_sql = FALSE;
// false відключити висновок помилок і налагоджувальної інформації
	var $debug_mode = TRUE;
// Хендлер запита
	var $hndl_query = FALSE;
// Версія MySQL сервера
	var $mysql_server_ver = '';
	
	function cMysql()
	{
	
	}
	
	// З'єднання з базою даних і вибірка бази
	function connect($sql_serv = 'localhost', $sql_user, $sql_pass, $sql_dbname = '' )
	{
		if(!$this->id_sql = @mysql_connect($sql_serv, $sql_user, $sql_pass)){
			$this->cerr( 0x1, mysql_error() );
			return 0x0;
		}
		
		$this->mysql_server_ver = mysql_get_server_info();
		
		if(!empty($sql_dbname))
		{
			if($this->selectdb($sql_dbname) === 0x1)
			{
				// Set unicode codepage if it support
				if (version_compare($this->mysql_server_ver, '4.1.0', '>=')) {
					$this->query("SET NAMES '". DB_CODEPAGE ."'");
				}
			}
		}
		
		return 0x1;
	}
	
	// Вибір бази даних
	function selectdb( $dbname = "")
	{
		if(!@mysql_select_db($dbname, $this->id_sql))
		{
			$this->cerr( 0x2, mysql_error() );
			return 0x0;
		}
		
		return 0x1;
	}
	
	// Виведення інформації про помилку при роботі з БД
	function cerr( $error_code = 0x0, $error_txt = "")
	{
		if($this->debug_mode)
		{	
			include_once(TSUE_DIR."/data/language/ru_loc/ru_mysqlerror.lng");
			
			switch($error_code)
			{
				case 0x1: $errorbody = $sqlerror_ru['connect'];     break; // Помилка з'єднання з SQL сервером.
				case 0x2: $errorbody = $sqlerror_ru['selectdb'];    break; // Помилка вибору бази.
				case 0x3: $errorbody = $sqlerror_ru['fetch_array']; break; // Помилка mysql_fetch_array
				case 0x4: $errorbody = $sqlerror_ru['query'];       break; // Помилка query
				case 0x5: $errorbody = $sqlerror_ru['result'];      break; // Помилка mysql_result
				default:  $errorbody = $sqlerror_ru['uknown']; 
			}
			
			$errorbody = $this->replace_hash($errorbody);
			$error_txt = $this->replace_hash($error_txt);
			
			include_once(TSUE_DIR."/data/messages/mysql.error.php");
			
			die($TSUE_MSG);
		}
		die( "TSUE wEngine: MySQL ERROR !!! Please enable <b>'debug_mode'</b> and you can see error reason" );
	}
	

	// Повертає масив даних
	function fetch_array( $query )
	{
		$i = 0;
		$rows = array();
		$hq = @mysql_query($query);
		if($hq)
		{
			while($rows[$i] = @mysql_fetch_array($hq))
			{
				$i++;
			}
		}
		else
		{
			$this->cerr( 0x3, mysql_error());
		}
		
		return $rows;
	}
	
	// Повертає асоціативний масив
	function fetch_assoc( $query )
	{
		$i = 0;
		$rows = array();
		$hq = @mysql_query($query);
		if($hq)
		{
			while($rows[$i] = @mysql_fetch_assoc($hq))
			{
				$i++;
			}
		}
		else
		{
			$this->cerr( 0x3, mysql_error());
		}
		
		return $rows;
	}
	
	// Запит до БД
	function query( $txt )
	{
		if( ($hndl_query = @mysql_query( $txt )) === FALSE ) {
			$this->cerr( 0x4, mysql_error());
		}
		
		return $hndl_query;
	}
	
	// Повертає значення однієї комірки.
	function qresule( $qRes, $val )
	{
		$res = @mysql_result($qRes, $val); 
		$this->cerr( 0x5, mysql_error());
		return $res;
	}
	
	// Швидка перевірка з'єднання з БД
	function check_connect($sql_host, $sql_user, $sql_pass, $sql_dbname)
	{
		if( ($id = @mysql_connect($sql_host, $sql_user, $sql_pass)) )
		{
			if(!@mysql_select_db($sql_dbname, $id))
			{
				@mysql_close($id);
				return FALSE;
			}else {
				@mysql_close($id);
				return TRUE;
			}
		} else {
			return FALSE;
		}
	}
	
	// Ховає всі 32 розрядні хеш таблиці, в разі
	// якщо хто небудь намагається дістати їх
	function replace_hash( $text )
	{
		return preg_replace("/([a-fA-F0-9]){32}/", " <b>(MD5_.!._HASH){32}</b>", $text);
	}
	
	// Повертає версію MySQL сервера
	function get_version()
	{
		return $this->mysql_server_ver;
	}
	
	// Екранує спецсимволи перед запитом до БД
	function sec_check( $text )
	{	
		if ($this->id_sql) 
		{
			return mysql_real_escape_string ($text, $this->id_sql);
		}
		else
		{
			return mysql_escape_string($text);
		}
	}
	
	
	// Закриття з'єднання, звільнення хендлера
	function close()
	{
		@mysql_close($this->id_sql);
		$this->id_sql = FALSE;
	}	
}


?>